package pe.com.hermes.hermetic.web.controller.general;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import pe.com.hermes.hermetic.beans.ClienteBean;
import pe.com.hermes.hermetic.beans.CuentaBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.forms.SelecBancoForm;
import pe.com.hermes.hermetic.web.forms.SelecClienteCorpForm;
import pe.com.hermes.hermetic.web.forms.SelecCuentaForm;

@Controller
@RequestMapping("/selecCuentaIS.html")
public class SeleccionarCuentaISController implements IController{
    
  protected final static Logger logger = Logger.getLogger(SeleccionarPuntoController.class);

  @Autowired
  private HermeticFacade servicioHermetic;
  
  
  @RequestMapping(method={RequestMethod.GET})    
  protected String showForm(ModelMap model,HttpServletRequest request)throws Exception{
      try {
          logger.info(this.getClass().toString()+" "+"metodo: GET");
          SelecCuentaForm form = new SelecCuentaForm();            
          String v_cliente=request.getParameter("v_cliente");
          String v_sucursal=request.getParameter("v_sucursal");
          String v_codCliente = request.getParameter("v_CodClie");
          String codRazoSociSession = ((Integer)request.getSession(false).getAttribute("codRazoSoci"))+"";
          if (codRazoSociSession.equals(v_codCliente)){
            v_codCliente=(String)request.getSession(false).getAttribute("listClie");
          }
          String codSucursal = (String)request.getSession(false).getAttribute("sucursal");
          form.setV_cliente(v_cliente);
          form.setV_sucursal(v_sucursal);
          
            if(v_cliente.equals("1"))
            {
              String listCodClies="";
              if (v_codCliente != null ){
                listCodClies = v_codCliente;
              }else{
                    String[] codClies=(String[])request.getSession(false).getAttribute("chksClieCorp");
                    if(codClies!=null)
                    for(int i=0;i<codClies.length;i++){
                        if(codClies[i]!=null){
                          if(i==0)
                              listCodClies=codClies[i];
                          else
                              listCodClies=listCodClies+","+codClies[i];
                        }
                    }
              }   
              form.setListCodClientes(listCodClies);
            }
            else if(v_cliente.equals("0")){
              form.setListCodClientes((String)request.getSession(false).getAttribute("listClie")); 
            }
            else{
              form.setListCodClientes(v_cliente);
            }
          
            if(codSucursal.equals(COD_SUCU_PRINCIPAL)){                
                  if(v_sucursal.equals("1")){
                    String listCodSucurs="";
                    String[] codSucurs=(String[])request.getSession(false).getAttribute("chksSucu");
                    if(codSucurs!=null)
                    for(int i=0;i<codSucurs.length;i++){
                      if(codSucurs[i]!=null){
                        if(i==0)
                            listCodSucurs=codSucurs[i];
                        else
                            listCodSucurs=listCodSucurs+","+codSucurs[i];
                      }
                    }
                    form.setListCodSucursales(listCodSucurs);
                  }
                  else if(v_sucursal.equals("0")){
                    form.setListCodSucursales("");
                  }
                  else{
                    form.setListCodSucursales(codSucursal);
                  }
            }
            else{
              form.setListCodSucursales(codSucursal);
            }
          
          List listCuentasIS = servicioHermetic.getListClieByCta(form.getListCodClientes(),form.getListCodSucursales(),"");
          String[] chksCuentasIS = (String[])request.getSession(false).getAttribute("chksCuentasIS");

          if(chksCuentasIS!=null)
            
            for(int i=0;i<chksCuentasIS.length;i++){
                if(chksCuentasIS[i]!=null)logger.info("el unico valor disp es  = "+chksCuentasIS[i]);  
            }
          
          listCuentasIS = Util.setChksSessionCtaSucu(chksCuentasIS, listCuentasIS);
        
          /*Si es que solo hay un check de Cliente corp en -1 (TODOS), quitarlo*/
          if (chksCuentasIS!=null && chksCuentasIS.length>0 && chksCuentasIS[0]!=null && chksCuentasIS[0].equals("-1")){
              request.getSession(false).setAttribute("chksCuentasIS",null);
          }
          
          form.setListCuentas(listCuentasIS);
          request.getSession(false).setAttribute("listCuentasIS",listCuentasIS);
          request.getSession(false).setAttribute("listCuenSize",listCuentasIS.size());
          logger.info("termino todo OK");
          model.put("listCuentasIS",listCuentasIS);
          model.put("listCuenSize",listCuentasIS.size());
          model.put(FORM_KEY,form);
          return FORM_SELECT_CUENTA_IS;
      }
      catch (Exception e) {
          logger.error(e);
          return FORM_ERROR_POPUP_VIEW;
      }
  }
  
  @RequestMapping(params={"accion=buscarCuentaIS","desCuenta","v_cliente","v_sucursal"})
  protected String buscarCuentaIS(@RequestParam("desCuenta") String desCuenta ,@RequestParam("v_cliente") String v_cliente,@RequestParam("v_sucursal") String v_sucursal, ModelMap model,HttpServletRequest request)throws Exception{
              logger.info(this.getClass().toString()+" "+"metodo: GET");
    try {
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        SelecCuentaForm form = new SelecCuentaForm();            
        form.setV_cliente(v_cliente);
        form.setV_sucursal(v_sucursal);
        String codSucursal = (String)request.getSession(false).getAttribute("sucursal");
        
          if(v_cliente.equals("1"))
          {
            String listCodClies="";
            String[] codClies=(String[])request.getSession(false).getAttribute("chksClieCorp");
            
            for(int i=0;i<codClies.length;i++){
                if(codClies[i]!=null){
                  if(i==0)
                      listCodClies=codClies[i];
                  else
                      listCodClies=listCodClies+","+codClies[i];
                }
            }
            form.setListCodClientes(listCodClies);
          }
          else if(v_cliente.equals("0"))
           form.setListCodClientes((String)request.getSession(false).getAttribute("listClie"));
        
        
        
      if(codSucursal.equals(COD_SUCU_PRINCIPAL)){
          
            if(v_sucursal.equals("1"))
            {
              String listCodSucurs="";
              String[] codSucurs=(String[])request.getSession(false).getAttribute("chksSucu");
              if(codSucurs!=null)
              for(int i=0;i<codSucurs.length;i++)
              {
                if(codSucurs[i]!=null){
                  if(i==0)
                      listCodSucurs=codSucurs[i];
                  else
                      listCodSucurs=listCodSucurs+","+codSucurs[i];
                }
              }
              form.setListCodSucursales(listCodSucurs);
            }
            else
              form.setListCodSucursales("");
      }
      else{
        form.setListCodSucursales(codSucursal);
      }
        
        List listCuentasIS = servicioHermetic.getListClieByCta(form.getListCodClientes(),form.getListCodSucursales(),desCuenta);
        
        String[] chksCuentasIS = (String[])request.getSession(false).getAttribute("chksCuentasIS");
        //listCuentasIS = Util.setChksSession(chksCuentasIS, listCuentasIS);                
        
        /*Si es que solo hay un check de Cliente corp en -1 (TODOS), quitarlo*/
        if (chksCuentasIS!=null && chksCuentasIS.length>0 && chksCuentasIS[0]!=null && chksCuentasIS[0].equals("-1")){
            request.getSession(false).setAttribute("chksCuentasIS",null);
        }
        
        form.setListCuentas(listCuentasIS);
        request.getSession(false).setAttribute("listCuentasIS",listCuentasIS);
        logger.info("termino todo OK");
        model.put("listCuentasIS",listCuentasIS);
        model.put(FORM_KEY,form);
        return FORM_SELECT_CUENTA_IS;
    }
    catch (Exception e) {
        logger.error(e);
        return FORM_ERROR_POPUP_VIEW;
    }
  }
  
  
  @RequestMapping(params={"accion=searchDesCuenta"}) 
  protected @ResponseBody String[] searchDesCuenta(HttpServletRequest request)throws Exception{        
      logger.info(this.getClass().toString()+" "+"metodo: searchDesCuenta");        
      List listModulos = (List)request.getSession(false).getAttribute("listCuentasIS");
      String[] arrayModulos = new String[listModulos.size()];
      for(int i=0;i<listModulos.size();i++){
          CuentaBean pBean=(CuentaBean)listModulos.get(i);
          arrayModulos[i] = pBean.getDescripcion();
      }
      return arrayModulos;
  }
  
  
  @RequestMapping(params={"accion=selectCtaSucu","ctaSucu"}) 
  protected @ResponseBody String[] selectCtaSucu(@RequestParam("ctaSucu") String ctaSucu,@ModelAttribute(FORM_KEY) SelecCuentaForm form,HttpServletRequest request)throws Exception{        
      logger.info(this.getClass().toString()+" "+"metodo: selectCodCuenta");        
      String[] chksCuentaIS = (String[])request.getSession(false).getAttribute("chksCuentasIS");
      if(("").equals(ctaSucu))
          return chksCuentaIS; 
      if(chksCuentaIS!=null)
          for(int i=0;i<chksCuentaIS.length;i++){                
              if(chksCuentaIS[i]!=null&&chksCuentaIS[i].equals(chksCuentaIS)){
                  break;
              }
              if(chksCuentaIS[i]==null){
                  chksCuentaIS[i] = ctaSucu;
                  break;
              }
          }            
      else{
          chksCuentaIS= new String[1000];
          chksCuentaIS[0]=ctaSucu;
      }
      
      request.getSession(false).setAttribute("chksCuentasIS",chksCuentaIS);        
      return chksCuentaIS;
  }
  
  @RequestMapping(params={"accion=deselectCtaSucu","ctaSucu"})
  protected @ResponseBody String[] deselectCtaSucu(@RequestParam("ctaSucu") String ctaSucu,@ModelAttribute(FORM_KEY) SelecCuentaForm form,HttpServletRequest request)throws Exception{        
      logger.info(this.getClass().toString()+" "+"metodo: deselectCodCuenta");        
      String[] chksCuentaIS = (String[])request.getSession(false).getAttribute("chksCuentasIS");
      
      if(chksCuentaIS!=null && chksCuentaIS.length > 0)
          for(int i=0;i<chksCuentaIS.length;i++){
              if(chksCuentaIS[i]!=null && chksCuentaIS[i].equals(ctaSucu)){
                  chksCuentaIS[i] = null;
                  break;
              }
          }
      
      request.getSession(false).setAttribute("chksCuentasIS",chksCuentaIS);        
      return chksCuentaIS;
  }
  

  @RequestMapping(params={"accion=selectTodos","codTodos"}) 
  protected String selectTodos(@RequestParam("codTodos") boolean codTodos ,ModelMap model,HttpServletRequest request)throws Exception{
    logger.info(this.getClass().toString()+" "+"metodo: GET");
    //SelecClienteForm form = (SelecClienteForm)model.get("form");//new SelecCuentaForm();
     SelecCuentaForm form = new SelecCuentaForm();
    //Asigno el check a todos los elenmentos de la lista Cuenta        
    
    List listCuentasIS = (List)request.getSession(false).getAttribute("listCuentasIS"); 
    
    listCuentasIS = Util.setChksTodos(codTodos, listCuentasIS);        
        //form.setListClientes(listClientes);
    
    //Subo a session los todos los Checks Cuenta
    if (codTodos) {
        String[] chksCuentaIS = Util.listToStringArray(listCuentasIS);
        request.getSession(false).setAttribute("chksCuentasIS",chksCuentaIS);       
    }else {
        request.getSession(false).setAttribute("chksCuentasIS",null);        
    }
    
    request.getSession(false).setAttribute("listCuentasIS",listCuentasIS);
    model.put("listCuentasIS",listCuentasIS);
    model.put(FORM_KEY,form);
    return FORM_SELECT_CUENTA_IS;
  }
  
  @RequestMapping(params = {"accion=chekSession","chks"}) 
  protected @ResponseBody Integer chekSession(@RequestParam("chks") String chks,HttpServletRequest request ){
      logger.info("metodo : chekSession");
      String[] stringChks = (String[])request.getSession(false).getAttribute(chks);
      return Util.contDatosSession(stringChks);
  }
}
